import { Module } from '@nestjs/common';
import { NotifyService } from './notify.service';
import { NotifyController } from './notify.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Notify } from './entities/notify.entity';
import { NotifyQueueConsumer } from './queue-consumer';
import { BullModule } from '@nestjs/bull';

/*
  队列相关配置：
  defaultJobOptions: 设置默认的任务选项，包括重试、超时等
  settings: 队列级别的设置，包括卡住任务检测
  并发控制通过@Process装饰器的concurrency参数设置
*/
@Module({
  imports: [
    TypeOrmModule.forFeature([Notify]),
    BullModule.registerQueue({
      name: 'notify',
      defaultJobOptions: {
        attempts: 3, // 重试3次
        backoff: {
          type: 'exponential', // 指数退避
          delay: 2000, // 初始延迟2秒
        },
        removeOnComplete: 20, // 保留最近20个成功任务
        removeOnFail: 100, // 保留最近100个失败任务
        timeout: 30000, // 30秒超时
      },
      settings: {
        stalledInterval: 30 * 1000, // 30秒检查卡住的任务
        maxStalledCount: 1, // 最大卡住次数
      },
    }),
  ],
  controllers: [NotifyController],
  providers: [NotifyService, NotifyQueueConsumer],
  exports: [NotifyService],
})
export class NotifyModule {}
